perm filename HEADER.SAI[PNT,HE]5 blob
sn#417607 filedate 1979-02-12 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 DEFINE VERSION!NUMBER = 7 COMMENT CHANGE THIS EACH TIME YOU MAKE ANY NEW
C00003 00003 defining constants and compile time macros to declare internal external etc
C00007 00004 defining default compile flags for $MAINPR
C00010 00005 ! IOSAIL debugging package
C00013 00006 ! global definitions of flags and other constants
C00018 00007 ! record class and pointer definitions
C00024 00008 ! procedure declarations
C00040 00009 ! variable declarations
C00047 00010 ! file requirements
C00049 ENDMK
C⊗;
DEFINE VERSION!NUMBER = 7 ; COMMENT CHANGE THIS EACH TIME YOU MAKE ANY NEW
CHANGES TO THIS FILE ***** ;
REQUIRE VERSION!NUMBER VERSION;
COMMENT defining constants and compile time macros to declare internal external etc;
DEFINE π = "3.141592653";
DEFINE ALT ="'775",
SEMC = "'73",
SP = "'40",
CR = "'15",
LF ="'12",
CRLF = "('15&'12)",
DLF = "('15&'12&'12)",
TAB = "'11",
FF = "'14",
! = "COMMENT ",
TV = "'13",
α = "BEGIN",
β = "END",
RUBOUT = "'177",
DQUOTE = "'42";
DEFINE TABDEF "[]" = [" "];
! if /nB is set in the command line then assume he wants a debugging parser;
require "<><>" delimiters;
IFC ¬DECLARATION(#DEBUG) THENC
DEFINE
DECIPHER_DEBUG(A)=<
ASSIGNC A=CVMS(COMPILER!BANNER)[2 TO ∞-1];
ASSIGNC A=CVPS(A)[LENGTH(SCANC(CVPS(A), LF, NULL, "IA"))+1 FOR ∞];
ASSIGNC A=CVPS(A)[LENGTH(SCANC(CVPS(A), TAB, NULL, "IA"))+1 FOR ∞];
ASSIGNC A=CVPS(A)[LENGTH(SCANC(CVPS(A), SP, NULL, "IA"))+1 FOR 1];
"A">;
IFC DECIPHER_DEBUG()="0"
THENC DEFINE #DEBUG=FALSE;
ELSEC DEFINE #DEBUG=TRUE;
EXTERNAL PROCEDURE BAIL;
ENDC
ENDC
DEFINE RCLASS "<>" = <RECORD_CLASS>;
DEFINE RPTR "<>" = <RECORD_POINTER>;
DEFINE RANY "<>" = <RECORD_POINTER(ANY_CLASS)>;
DEFINE ID_TYPE = 1,
INT_TYPE = 2,
REAL_TYPE = 3,
OPERATOR_TYPE = 4,
RES_TYPE = 5,
UNDECLARED_TYPE = 0;
! #TOKEN = ID_TYPE for identifier,
INT_TYPE for integer,
REAL_TYPE for real,
OPERATOR_TYPE for operators,
RES_TYPE for reserved words,
UNDECLARED_TYPE for not declared id's;
DEFINE #INDLK = 0; ! affix type = independent link;
DEFINE #NRGLK = 1; ! affix type = non rigid link;
DEFINE #RGDLK = 2; ! affix type = rigid link;
DEFINE #DEG = "(3.141592653/180.0)"; ! for radians/degrees conversion;
DEFINE DECLAR_VAR(DEC,I,E) "<>" =
< IFC I THENC INTERNAL DEC ; ELSEC
IFC E THENC EXTERNAL DEC ; ENDC ENDC > ;
DEFINE DECLAR_PROC(DEC,I,E) "<>" =
< IFC I THENC FORWARD INTERNAL DEC ; ELSEC
IFC E THENC EXTERNAL DEC ; ENDC ENDC > ;
DEFINE REQUIRE_LOADMODULE(FLAG, FILE) "<>" =
< IFC FLAG THENC
REQUIRE "FILE" LOAD_MODULE;
ENDC > ;
DEFINE MAX_OFFSET=1; ! max allowable offset ;
DEFINE CUR_OFFSET=2; ! current offset ;
DEFINE CON_OFFSET=3; ! constant offsets end here;
DEFINE ARM_OFFSET=4; ! arm offset starts here;
DEFINE PRG_OFFSET=5; ! program defined variables begin here;
DEFINE RES_OFFSET=6; ! reserved words table entries end here;
DEFINE YRM_ALOFFSET=0,
YHD_ALOFFSET=1,
BRM_ALOFFSET=2,
BHD_ALOFFSET=3;
comment defining default compile flags for $MAINPR;
IFCR NOT DECLARATION(#HELP) THENC DEFINE #HELP = TRUE; ENDC
! the program is compiled without
help facilities (?, complete error explanations,
syntax of the istructions..);
IFCR NOT DECLARATION(#WRIST) THENC DEFINE #WRIST = TRUE; ENDC
IFCR NOT DECLARATION(#GATHER) THENC DEFINE #GATHER = TRUE; ENDC
IFCR NOT DECLARATION(#DISPL) THENC DEFINE #DISPL = TRUE; ENDC
! the program is without the display;
IFCR NOT DECLARATION(#OUTPT) THENC DEFINE #OUTPT = TRUE; ENDC
! the progaam is without file I/O;
ifcr not declaration(#nofunct) thenc define #nofunct = true; endc
IFCR NOT DECLARATION(#INPUT) THENC DEFINE #INPUT = TRUE; ENDC
! the program is without arm interface;
IFCR NOT DECLARATION(#ARROW) THENC DEFINE #ARROW = TRUE; ENDC
! the program is without arm interface;
IFC ¬ #DISPL THENC REDEFINE #ARROW=FALSE; ENDC
DEFINE #INDEF = 0; ! #INDEF for not defined direction in input;
DEFINE #SORRY "<>" = <("sorry, not implemented "&CRLF)>;
! used for non implemented parts message;
DEFINE #NOTYET "<>" = <("yarm not yet available "&CRLF)>;
! used for non implemented parts message;
DEFINE #VERSION "<>" = <("instruction not available in this POINTY version "&CRLF)>;
! used for different version message;
! IOSAIL debugging package ;
! following taken from IOSAIL.HDR[107,BTH] and modified;
! macros BUGON, BUGOFF, DEBUG, boolean !bugoff;
! boolean !bugoff;
! define BUGON = {!bugoff:=false};
! define BUGOFF = {!bugoff:=true};
define !bugoff = false; ! INITIALLY DEBUG ON;
define BUGON "{}" = {redefine !bugoff = true ; };
define BUGOFF "{}" = {redefine !bugoff = false ; };
define DEBUG (where,arglist) "{}" = {
IFCR NOT !BUGOFF THENC
begin "DEBUG"
integer sf1,sf2;
getformat(sf1,sf2);
setformat(0,7);
redefine !bugind = 1;
print("DEBUG:where ");
ifc cvps(arglist) neq "("
thenc redefine !argl = {(arglist)};
elsec redefine !argl = {arglist}; endc
ifc length(cvms(!argl)) > 2 thenc
forlc !bugind := !argl doc {
print((cvps(!bugind) & "="),
ifc expr!type(!bugind) land check!type(string)
thenc """",!bugind,""""
elsec !bugind endc,
"; ");}
endc
endc
print(crlf);
setformat(sf1,sf2);
end "DEBUG"
ENDC };
! WARNING--!BUGIND and !ARGL are required by the debug package,
! and should not be otherwise used in this block
! to use:
! DEBUG(label,(i,j,k,l));
! alternate form:
! DEBUG(label,i);
! as long as i does not start with "(" this has the same effect as
! DEBUG(label,(i));
! global definitions of flags and other constants;
DEFINE #MIN = 1;
DEFINE #MAX = 7;
DEFINE #NTYPE = #MAX; ! 7 data types= 7 classes of records;
DEFINE #LTYPE = 70; ! number of elements for each type;
DEFINE #SC = 1; ! SCALAR ;
DEFINE #VT = 2; ! VECTOR ;
DEFINE #RT = 3; ! ROT ;
DEFINE #TR = 4; ! TRANS ;
DEFINE #FRE= 4; ! frame expression ;
DEFINE #FR = 5; ! FRAME ;
DEFINE #MC = 6; ! MACRO ;
DEFINE #FN = 7; ! FUNCTION ;
DEFINE #EX = 8; ! EXPRESSION ;
DEFINE #SY = 9; ! SYMBOL ;
DEFINE #DTYPE= 10; ! # OF DATATYPES, INCREASE IF MORE RECORDS DEFINED;
DEFINE #PR = #FN;
DEFINE #SIMPLE = 0;
DEFINE #ARRAY = 1;
DEFINE #PROCEDURE = 2 ;
DEFINE TTY_X=1; ! TTY input ;
DEFINE DSK_X=2 ; ! DSK input ;
DEFINE QUERY_X=3 ; ! QUERY input ;
DEFINE MESSAGE_X=4; ! MESSAGE input by MAIL from other prog ;
DEFINE WR_M = 1; ! DSK output for macros;
DEFINE ED_M = 2; ! TTY output for editing macros;
DEFINE DS_M = 3; ! TTY output for displaying macros;
! DEFINE GRINCH = '1000000,
GRINCH2 = '2000000;
DEFINE #HDRTYP = '400; ! Pointer to frame header ;
DEFINE #ARRTYP = '1000; ! Pointer to array header ;
DEFINE #REFTYP = '2000; ! Indirect pointer to entry in another environment;
DEFINE #PRCTYP = '4000; ! Pointer to procedure descriptor ;
DEFINE #MINUS1 = '177777; ! PDP11 representation of -1 ;
! pdp10 interpreter indices - should move these out of here when convenient;
DEFINE XXASSIGN = 1,
XXAFFIX = 2,
XXUNFIX = 3,
XXRFORCE = 4,
XXMOVE = 5,
XXARRDECL = 6,
XXPRCDECL = 7,
XXARRDECL2= 8;
IFCR NOT DECLARATION($MAINPR) THENC DEFINE $MAINPR = FALSE; ENDC
IFCR NOT DECLARATION($PARSER) THENC DEFINE $PARSER = FALSE; ENDC
IFCR NOT DECLARATION($$HELP) THENC DEFINE $$HELP = FALSE; ENDC
IFCR NOT DECLARATION($INPOUT) THENC DEFINE $INPOUT = FALSE; ENDC
IFCR NOT DECLARATION($OUTPUT) THENC DEFINE $OUTPUT = FALSE; ENDC
IFCR NOT DECLARATION($DISPLY) THENC DEFINE $DISPLY = FALSE; ENDC
IFCR NOT DECLARATION($INIT) THENC DEFINE $INIT = FALSE; ENDC
IFCR NOT DECLARATION($EXPR) THENC DEFINE $EXPR = FALSE; ENDC
IFCR NOT DECLARATION($MSSNGR) THENC DEFINE $MSSNGR = FALSE; ENDC
IFCR NOT DECLARATION($GATHER) THENC DEFINE $GATHER = FALSE; ENDC
IFCR NOT DECLARATION($PPCODE) THENC DEFINE $PPCODE = FALSE; ENDC
IFC ¬($MAINPR OR $PARSER OR $$HELP OR $INPOUT OR $OUTPUT OR $EXPR
OR $DISPLY OR $INIT OR $MSSNGR OR $GATHER OR $PPCODE) THENC
REQUIRE "
**********PROGRAM DOESN'T HAVE ID ****************
" MESSAGE;
ENDC
! record class and pointer definitions;
DECLAR_VAR(<RCLASS SYMBOL (STRING PNAME;
RANY OBJECT; ! rptr for further info;
INTEGER TYPE, ! #SC,#VT,#RT,#TR,#FR,#MC,#PR(UNTYPED);
ACCESS, ! #SIMPLE,#ARRAY,#PROCEDURE;
OFFSET, ! level offset ;
INDEX ! array index for simple variables ;
! INTEGER NUSEDBY,NUSES;
! BOOLEAN VALID; ! RANY ARRAY USEDBY,USES;)>,
$MAINPR, $PARSER∨$INPOUT∨$DISPLY∨$INIT∨$EXPR∨$MSSNGR);
DECLAR_VAR(<RPTR(SYMBOL)ARRAY $YMTAB[1:#NTYPE,1:#LTYPE]>,
$MAINPR, $INPOUT∨$DISPLY);
DECLAR_VAR(<RCLASS SYMTREE(RPTR(SYMBOL)SYM;
RPTR(SYMTREE)LLINK,RLINK)>, $MAINPR, $PARSER∨$EXPR);
DECLAR_VAR(<RCLASS BLOCKREC(RPTR(SYMTREE)TREE;
RPTR(BLOCKREC)NEXT;
INTEGER LEVEL,#ARGS)>, $MAINPR, $PARSER∨$EXPR);
DECLAR_VAR(<RPTR(BLOCKREC) CURBLOCK>, $MAINPR, $PARSER∨$EXPR);
DECLAR_VAR(<INTEGER ARRAY $ENTRY[1:#NTYPE]>, $MAINPR, $INPOUT∨$DISPLY∨$INIT);
DECLAR_VAR(<RCLASS SCALAR (REAL VALUE)>, $MAINPR, $PARSER∨$INPOUT∨$DISPLY∨$INIT∨$EXPR);
DECLAR_VAR(<RCLASS VECTOR (REAL XC,YC,ZC)>, $MAINPR, $PARSER∨$INPOUT∨$DISPLY∨$INIT∨$EXPR);
DECLAR_VAR(<RCLASS FRAME (STRING PNAME;
RPTR (FRAME) DAD,SON,EBRO,YBRO; INTEGER HOWLINKED;
REAL ARRAY XF;
INTEGER BYOFFSET; RPTR(SYMBOL)SYM)>, $MAINPR,
$PARSER∨$MSSNGR
∨$INPOUT∨$DISPLY
∨$INIT∨$EXPR);
DECLAR_VAR(<RCLASS ROT (REAL ARRAY XF)>, $MAINPR, $PARSER∨$INPOUT∨$DISPLY∨$INIT∨$EXPR);
DECLAR_VAR(<RCLASS TRANS(REAL ARRAY XF)>, $MAINPR, $PARSER∨$INPOUT∨$DISPLY∨$INIT∨$EXPR);
DECLAR_VAR(<RCLASS GRAPHREC(REAL ARRAY DATA;
INTEGER SIZE,CTLBITS,NPNTS)>, $MAINPR, $EXPR∨$GATHER);
DECLAR_VAR(<RPTR(GRAPHREC) GRAPTR>, $MAINPR, $EXPR∨$GATHER);
DECLAR_VAR(<RCLASS WRISTREC(INTEGER ARRAY DATA)>, $MAINPR, $EXPR);
DECLAR_VAR(<RPTR(WRISTREC)WSTPTR>, $MAINPR, $EXPR);
DECLAR_VAR(<RCLASS ARRAYREC(INTEGER #DIM;
INTEGER ARRAY LB,UB;
RANY ARRAY PTR)>, $MAINPR, $PARSER∨$EXPR);
DECLAR_VAR(<RCLASS TEN$(INTEGER OP,TYPE; RPTR(SYMBOL,FRAME)S1,S2)>,
$EXPR, $MAINPR∨$INIT∨$MSSNGR);
DECLAR_VAR(<RCLASS EXPR$(INTEGER #BODY,TYPE;INTEGER ARRAY BODY;
INTEGER #TEN; RPTR(TEN$)ARRAY TEN$)>,
$EXPR, $MAINPR∨$INIT∨$MSSNGR);
DECLAR_VAR(<RCLASS EXPR$(INTEGER #BODY,TYPE;INTEGER ARRAY BODY;
INTEGER #TEN; RANY ARRAY TEN$)>,
FALSE, $PPCODE);
DECLAR_VAR(<RCLASS PLIST(STRING PARAM;
RPTR(PLIST) NEXTP)>, $MAINPR, $PARSER∨$INPOUT);
DECLAR_VAR(<RCLASS MACRO(STRING BODY;
INTEGER NPARAM;
RPTR(PLIST) PARLST)>, $MAINPR, $PARSER∨$INPOUT);
DECLAR_VAR(<RCLASS PROC(INTEGER NARGS;
STRING HEAD; ! first part of declaration ;
STRING BODY;
STRING ARRAY ARGNAME;
INTEGER ARRAY ARGDIM;
INTEGER ARRAY ARGTYPE;
INTEGER ARRAY ARGACCS)>, $MAINPR,$PARSER∨$DISPLY∨$EXPR);
DECLAR_VAR(<RPTR(SYMBOL)CURPROC>, $MAINPR, $EXPR∨$PARSER);
DECLAR_VAR(<RCLASS TREE( RANY DATA;
INTEGER DTYPE)>, $MAINPR, $PARSER∨$EXPR);
DECLAR_VAR(<RPTR (FUNCTION) FN_CUR>, FALSE, FALSE);
! pointers to predeclared symbols;
DECLAR_VAR(<RPTR(SYMBOL)HANDB,HANDY>, $MAINPR, $INIT∨$EXPR);
DECLAR_VAR(<RPTR(SYMBOL)BARM,YARM,BPARK,YPARK,BGRASP>, $MAINPR, $INIT∨$EXPR);
DECLAR_VAR(<RPTR(SYMBOL)WORLD>, $MAINPR, $INIT∨$INPOUT∨$EXPR);
DECLAR_VAR(<RPTR(FRAME)F_BARM,F_YARM,F_ARM>, $MAINPR, $INIT);
DECLAR_VAR(<RPTR(FRAME)F_WRLD>, $MAINPR, $INIT∨$DISPLY∨$INPOUT∨$EXPR);
! procedure declarations ;
! **** MAIN PROGRAM PROCEDURES ****** ;
DECLAR_PROC(<RPTR(SYMBOL)PROCEDURE SEARCHBLOCK(STRING S; RPTR(BLOCKREC)R)>,
$MAINPR, $PARSER);
DECLAR_PROC(<RPTR(SYMBOL)PROCEDURE NWAREC(RPTR(SYMBOL)SYMB;INTEGER ARRAY LB,UB)>,
$MAINPR, $EXPR);
DECLAR_PROC(<procedure outdpw (string mess; integer string_pos, pp_pos)>,
FALSE, $MAINPR);
DECLAR_PROC(<PROCEDURE ADDSYMUSED(RPTR(SYMBOL)SYM,USES)>,false, FALSE);
DECLAR_PROC(<RPTR(SYMBOL) PROCEDURE CHECK(STRING SYMB; INTEGER NM)>,
$MAINPR, $INIT);
DECLAR_PROC(<RPTR(SYMBOL) PROCEDURE CHECKTOT(STRING SYMB;REFERENCE INTEGER NM)>,
$MAINPR, $PARSER);
DECLAR_PROC(<PROCEDURE READCODE(STRING FID; BOOLEAN ECHO(FALSE))>,
$MAINPR, $INIT);
DECLAR_PROC(<INTEGER PROCEDURE DECSTR(STRING S)>, $MAINPR, $PARSER);
DECLAR_PROC(<PROCEDURE ERROR(STRING ERR1,ERR2(NULL))>, $MAINPR, $PARSER∨$INPOUT∨$EXPR∨$MSSNGR);
DECLAR_PROC(<PROCEDURE ESC_P>, $MAINPR, $PARSER∨$INPOUT);
DECLAR_PROC(<PROCEDURE ABORT1(STRING NAME,ERROR(NULL))>, $MAINPR, $INPOUT∨$PARSER);
DECLAR_PROC(<PROCEDURE UFX_NODE(RPTR(FRAME)EL1,EL2)>, $MAINPR, $EXPR);
DECLAR_PROC(<PROCEDURE AFX_NODE(RPTR(FRAME)N,D;INTEGER HOW)>, $MAINPR, $EXPR);
DECLAR_PROC(<STRING PROCEDURE FRCVER(STRING FILE)>, $MAINPR∧#OUTPT, $INPOUT);
DECLAR_PROC(<PROCEDURE UPDATE>, $MAINPR, $PARSER);
DECLAR_PROC(<RECURSIVE RPTR(EXPR$)PROCEDURE PARSE>, $MAINPR, $INIT);
DECLAR_PROC(<RPTR (SCALAR,VECTOR,ROT,FRAME,TRANS) PROCEDURE MK_REC(INTEGER TYPE)>,
$MAINPR, $INIT∨$EXPR);
DECLAR_PROC(<PROCEDURE ENSYM$(RPTR(SYMBOL)SYM; INTEGER NM(0))>,
$MAINPR, $EXPR);
DECLAR_PROC(<RPTR (SYMBOL) PROCEDURE ENSYM(STRING SYMB;INTEGER NM;
RANY VAL;RPTR(SYMBOL)OLDREC(NULL_RECORD);
INTEGER ACCESS(#SIMPLE))>, $MAINPR, $INIT);
DECLAR_PROC(<PROCEDURE CHKESC_I>, $MAINPR, $PARSER∨$MSSNGR);
DECLAR_PROC(<SIMPLE PROCEDURE ESC_I>, $MAINPR, $PARSER);
! **** FEXPR PROCEDURES ******* ;
DECLAR_PROC(<RPTR(EXPR$)PROCEDURE PREF(RPTR(SYMBOL)S)>, $EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$)PROCEDURE AREF(RPTR(SYMBOL)S;INTEGER OPERATION)>,
$EXPR, $MAINPR);
DECLAR_PROC(<RPTR(expr$)PROCEDURE $$GTEXPR>, $EXPR, $MAINPR);
DECLAR_PROC(<RECURSIVE PROCEDURE $EXECUTE(RPTR(EXPR$)CUEXPR)>,
$EXPR, $MAINPR∨$INIT);
DECLAR_PROC(<RECURSIVE RPTR(EXPR$) PROCEDURE $$GTVEXPR>,
$EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$) PROCEDURE αEXPR$(INTEGER ARRAY BUFF;INTEGER TYPE)>,
$EXPR, $MAINPR∨$INIT);
DECLAR_PROC(<RPTR(EXPR$)PROCEDURE EXPR$1(INTEGER I(0))>,$EXPR, $MAINPR);
DECLAR_PROC(<RPTR (EXPR$)PROCEDURE EXPR$2(INTEGER I(0),J(0))>,
$EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$)PROCEDURE EXPR$3(INTEGER I(0),J(0),K(0))>,
$EXPR, $MAINPR);
DECLAR_PROC(<RPTR(TEN$)PROCEDURE αTEN$(INTEGER OP,TYPE; RPTR(SYMBOL,FRAME)F1(NULL_RECORD),
F2(NULL_RECORD))>,
$EXPR, $INIT);
DECLAR_PROC(<PROCEDURE ADDTEN(RPTR(EXPR$)E;RPTR(TEN$)T)>,
$EXPR, $INIT);
DECLAR_PROC(<RPTR(EXPR$) PROCEDURE $APPEND(RPTR(EXPR$)E1,E2; INTEGER TYPE(0))>,
$EXPR, $INIT∨$MAINPR);
DECLAR_PROC(<RPTR(EXPR$) PROCEDURE $AAPPEND(RPTR(EXPR$) ARRAY APTR;INTEGER TYPE(0))>,
$EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$)PROCEDURE $KVARPCODE(INTEGER N)>, $EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$)PROCEDURE $RFORCEPCODE>, $EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$) PROCEDURE $RTNPCODE(RPTR(EXPR$)EXP)>, $EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$)PROCEDURE $SMPDCLPCODE(INTEGER OBTYPE,J)>,
$EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$) PROCEDURE $ARRDCLPCODE(STRING NAME;
RPTR(EXPR$) ARRAY BOUNDS;
INTEGER OBTYPE,ADIM)>,
$EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$)PROCEDURE $PRCDCLPCODE(RPTR(SYMBOL)SYM;
RPTR(EXPR$)PBODY)>, $EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$) PROCEDURE $AFXPCODE(RPTR(SYMBOL)SON,DAD; INTEGER AFFCODE;
RPTR(EXPR$)E1)>,
$EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$) PROCEDURE $CENTERPCODE(INTEGER ARM)>,
$EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$) PROCEDURE $DDTPCODE>,
$EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$)PROCEDURE $MOVEPCODE(RPTR(SYMBOL) S1,S2;RPTR(EXPR$)ARRAY FDESTS;
INTEGER NFDEST)>, $EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$)PROCEDURE $DRIVEPCODE(INTEGER COLOR;STRING HOW;
INTEGER JOINT;RPTR(EXPR$)SCAL)>, $EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$) PROCEDURE $ASGPCODE(RPTR(EXPR$) EXPR;
RPTR(SYMBOL)S)>, $EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$) PROCEDURE $AASGPCODE(RPTR(EXPR$) E1,E2)>,
$EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$) PROCEDURE $UFXPCODE(RPTR(SYMBOL) SON,DAD)>,
$EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$)PROCEDURE $PRNPCODE(STRING S)>,
$EXPR, $MAINPR);
DECLAR_PROC(<RPTR(EXPR$) PROCEDURE $PRVPCODE(RPTR(EXPR$)EE)>,
$EXPR, $mainpr);
DECLAR_PROC(<RPTR(EXPR$)PROCEDURE $IFPCODE(RPTR(EXPR$) COND,A,B(NULL))>,
$EXPR, $mainpr);
DECLAR_PROC(<RPTR(EXPR$)PROCEDURE $WHILEPCODE(RPTR(EXPR$)COND,STAT)>,
$EXPR, $mainpr);
DECLAR_PROC(<RPTR(EXPR$)PROCEDURE $DOPCODE(RPTR(EXPR$)S,B)>,
$EXPR, $mainpr);
DECLAR_PROC(<RPTR(EXPR$)PROCEDURE $FORPCODE(RPTR(SYMBOL)K;RPTR(EXPR$)I1,I2,I3,S)>,
$EXPR, $mainpr);
! *** PARSER PROCEDURES **** ;
DECLAR_PROC(<RECURSIVE PROCEDURE GTOKEN(BOOLEAN NONSTOP(TRUE))>,
$PARSER, $MAINPR∨$init∨$EXPR);
! if response is left out ASKUSER will wait for terminal input;
DECLAR_PROC(<PROCEDURE ASKUSER(STRING RESPONSE(null))>, $PARSER, $MAINPR∨$INPOUT∨$INIT);
DECLAR_PROC(<PROCEDURE PUSHDEVSTACK>, $PARSER, $MAINPR);
DECLAR_PROC(<PROCEDURE POPDEVSTACK>, $PARSER, $MAINPR);
DECLAR_PROC(<PROCEDURE MTYDEVSTACK>, $PARSER, $MAINPR∨$init);
DECLAR_PROC(<PROCEDURE NEWLINE>, $PARSER, $MAINPR);
DECLAR_PROC(<SIMPLE BOOLEAN PROCEDURE FINAL>, $PARSER, $MAINPR);
DECLAR_PROC(<PROCEDURE READTO(STRING S)>, $PARSER, $MAINPR);
DECLAR_PROC(<STRING PROCEDURE NAMEFILE>, $PARSER, $MAINPR∨$INPOUT);
DECLAR_PROC(<SIMPLE STRING PROCEDURE FROMPART>, $PARSER, $MAINPR);
DECLAR_PROC(<SIMPLE STRING PROCEDURE AXIS_READ>, $PARSER, $MAINPR);
DECLAR_PROC(<SIMPLE STRING PROCEDURE DEV_READ>, $PARSER, $MAINPR);
DECLAR_PROC(<SIMPLE STRING PROCEDURE ARM_READ>, $PARSER, $MAINPR);
DECLAR_PROC(<SIMPLE STRING PROCEDURE HAND_READ>, $PARSER, $MAINPR);
DECLAR_PROC(<SIMPLE PROCEDURE SEMICOL_READ>, $PARSER, $MAINPR);
DECLAR_PROC(<SIMPLE PROCEDURE WORD_READ(STRING S)>, $PARSER, $MAINPR);
DECLAR_PROC(<SIMPLE STRING PROCEDURE MVFR_READ>, $PARSER, $MAINPR);
DECLAR_PROC(<SIMPLE STRING PROCEDURE IDF_READ>, $PARSER, $MAINPR);
! **** HELP PROCEDURES **** ;
DECLAR_PROC(<PROCEDURE HLPMSG(INTEGER HELP1,HELP2(0))>, $$HELP, $MAINPR∧#HELP);
DECLAR_PROC(<PROCEDURE HLPDO(STRING ANSWER)>, $$HELP, $MAINPR∧#HELP);
! **** OUTPUT PROCEDURES **** ;
IFC $MAINPR∨$OUTPUT∨$INPOUT∨$DISPLY THENC
DECLAR_PROC(<SIMPLE STRING PROCEDURE CVGX(REAL R)>, $OUTPUT, $INPOUT∨$MAINPR∨$DISPLY);
DECLAR_PROC(<STRING PROCEDURE STR_RT(REAL ARRAY XF;INTEGER NUM(1))>,
$OUTPUT,$INPOUT∨$MAINPR∨$DISPLY);
DECLAR_PROC(<SIMPLE STRING PROCEDURE STR_VT(REAL X,Y,Z;INTEGER NUM(1))>,
$OUTPUT,$INPOUT∨$MAINPR∨$DISPLY);
DECLAR_PROC(<SIMPLE STRING PROCEDURE STR_TR(REAL ARRAY XF;INTEGER ROT(1),VECT(1))>,
$OUTPUT,$INPOUT∨$MAINPR∨$DISPLY);
ENDC
! ***** DISPLY ROUTINES ***** ;
IFC $DISPLY∨($MAINPR∧(#OUTPT∨#DISPL)) THENC
DECLAR_PROC(<PROCEDURE DPYOUT(INTEGER POG)>, FALSE∧$DISPLY, (#OUTPT∨#DISPL)∧$MAINPR);
DECLAR_PROC(<SIMPLE PROCEDURE INIDPY>, $DISPLY, #OUTPT∨#DISPL);
DECLAR_PROC(<SIMPLE PROCEDURE DPYDRAW>, $DISPLY, #OUTPT∨#DISPL);
DECLAR_PROC(<SIMPLE PROCEDURE DPYFREE>, $DISPLY, #OUTPT∨#DISPL);
DECLAR_PROC(<SIMPLE PROCEDURE OUTDPY>, $DISPLY, #OUTPT∨#DISPL);
DECLAR_PROC(<STRING PROCEDURE DPY_STRING(INTEGER TYPE)>, $DISPLY, #OUTPT∨#DISPL);
DECLAR_PROC(<RECURSIVE STRING PROCEDURE FRTREE(RPTR(FRAME) ND;INTEGER DEPTH)>,
$DISPLY, #OUTPT∨#DISPL);
! # of characters for frame tree;
DECLAR_VAR(<INTEGER $NCHAR>, $DISPLY, #OUTPT∨#DISPL);
ENDC
! ****** $INPOUT ROUTINES ******* ;
IFC ($MAINPR∧#OUTPT)∨$INPOUT∨$DISPLY THENC
DECLAR_PROC(<PROCEDURE FCLOSE>, $INPOUT, #OUTPT);
DECLAR_PROC(<PROCEDURE AL_CLOSE(STRING FILE )>, $INPOUT, #OUTPT);
DECLAR_PROC(<STRING PROCEDURE MACDYS(RPTR(SYMBOL) TMAC)>, $INPOUT, $DISPLY∨$MAINPR);
DECLAR_PROC(<PROCEDURE WRITECODE(STRING FILE;RPTR(SYMBOL) ELEMENT;
INTEGER DTYPE;STRING DEFPR)>, $INPOUT, #OUTPT);
DECLAR_PROC(<STRING PROCEDURE EWDYSCODE(RPTR(SYMBOL) EL1)>, $INPOUT, $MAINPR);
DECLAR_PROC(<PROCEDURE EWDSPL(STRING SSSS; INTEGER TYPOUT)>, $INPOUT, $MAINPR);
DECLAR_PROC(<PROCEDURE PWDSPL(STRING SSSS)>, $INPOUT, $MAINPR);
DECLAR_PROC(<PROCEDURE TTYSAVE>, $INPOUT, #OUTPT);
DECLAR_PROC(<STRING PROCEDURE FILE_STRING>, $INPOUT, #OUTPT);
DECLAR_PROC(<INTEGER PROCEDURE ISFILE(STRING FILE)>, $INPOUT, #OUTPT);
DECLAR_PROC(<STRING PROCEDURE DAT_STR>, $INPOUT, #OUTPT);
ENDC
DECLAR_PROC(<PROCEDURE UDATEFILE(INTEGER CHAN)>, $INPOUT, $PARSER);
! ******* INIT ROUTINES ********** ;
DECLAR_PROC(<PROCEDURE INIT>, $INIT, $MAINPR);
! ******** WRIST ROUTINES *************;
DECLAR_PROC(<INTEGER PROCEDURE RWRIST(STRING COMMAND; INTEGER VAL(0); STRING FILENAME(NULL))>,
FALSE, $MAINPR∧#WRIST);
! ********* MSSNGR ROUTINES ***********;
DECLAR_PROC(<PROCEDURE EVAL(RPTR(EXPR$)EE)>, $MSSNGR, $EXPR);
DECLAR_PROC(<PROCEDURE ALINIT>, $MSSNGR, $INIT);
DECLAR_PROC(<REAL PROCEDURE RFVAL(INTEGER WORD1,WORD2)>, $MSSNGR, $EXPR∨$PPCODE);
! ********* GATHER ROUTINES ************ ;
DECLAR_PROC(<PROCEDURE GRAPH(REAL ARRAY RDATA; INTEGER CTL,NPTS,SIZE)>,
FALSE, $MAINPR∨#GATHER);
! ********* PPCODE ROUTINES ************* ;
DECLAR_PROC(<PROCEDURE PPCODE(RPTR(EXPR$)EE;INTEGER SNUM(1))>,
$PPCODE,#DEBUG∧($EXPR∨$MSSNGR));
! variable declarations ;
! **** BREAK TABLES ****** ;
DECLAR_VAR(<INTEGER $RETAB,$SKTAB,$SPCTAB,$SCNTAB,$NUMTAB,$ALFTAB,$FFTAB,
$DSHTAB,$CRTAB>, $MAINPR, $PARSER∨$INIT);
DECLAR_VAR(<INTEGER $DPYTAB>, $MAINPR, $PARSER∨$INIT∨$DISPLY);
DECLAR_VAR(<INTEGER $ERRTAB>, $MAINPR, $PARSER∨$INPOUT∨$INIT);
DECLAR_VAR(<INTEGER $BSKTAB>, $MAINPR, $PARSER∨$INPOUT∨$INIT∨$OUTPUT);
! **** DEFAULT MOVE FROM PREVIOUS **** ;
DECLAR_VAR(<STRING OLDOBJ>, $MAINPR, $PARSER);
! **** I/O TO POINTY ******* ;
! ESCAPE_I FLAG;
DECLAR_VAR(<BOOLEAN $ESC_I>, $MAINPR, $PARSER);
! if true output is required;
DECLAR_VAR(<BOOLEAN $OUT>, $MAINPR, $PARSER∨$INPOUT);
! if true read from disk file ;
DECLAR_VAR(<INTEGER $TTYCH>, $MAINPR, $PARSER∨$INPOUT);
! name of file for teletype input ;
DECLAR_VAR(<STRING $TTYFL>, $MAINPR, $INPOUT∨$INIT∨$DISPLY);
! total number of files defined ;
DECLAR_VAR(<INTEGER $TOTFL>, $MAINPR, $INPOUT∨$INIT);
! last file used for output ;
DECLAR_VAR(<STRING $ALFL>, $MAINPR, $INPOUT∨$INIT);
! current i/o device ;
DECLAR_VAR(<INTEGER DEVICE>, $MAINPR, $PARSER∨$INIT);
! end of file ? ;
DECLAR_VAR(<INTEGER $EOF>, $MAINPR, $PARSER∨$INPOUT);
! input channel for file input ;
DECLAR_VAR(<INTEGER $INPCH>, $MAINPR, $PARSER);
! **** DISPLAY ***** ;
! vertical position of the arrow;
DECLAR_VAR(<INTEGER $ARROW>, $MAINPR, $DISPLY);
! flag to update display ;
DECLAR_VAR(<INTEGER $ALLOW>, $MAINPR, $PARSER∨$INIT);
! strings for various parts of the display ;
DECLAR_VAR(<STRING ARRAY $DISPLAYLIST[#MIN:#MAX]>, $MAINPR, $DISPLY∨$EXPR);
IFC ($MAINPR ∨ $DISPLY∨$EXPR) THENC
DEFINE $SCLST= <$DISPLAYLIST[#SC]>,
$VTLST= <$DISPLAYLIST[#VT]>,
$RTLST= <$DISPLAYLIST[#RT]>,
$TRLST= <$DISPLAYLIST[#TR]>,
$FRLST= <$DISPLAYLIST[#FR]>,
$FNLST= <$DISPLAYLIST[#FN]>,
$MCLST= <$DISPLAYLIST[#MC]>;
ENDC
DECLAR_VAR(<STRING $OULST,$DFLST>, $MAINPR, $INPOUT∨$DISPLY∨$EXPR);
! **** SCANNER VARIABLES AND PARAMETERS **** ;
! the token itself ;
DECLAR_VAR(<STRING TOKEN>, $MAINPR, $PARSER∨$init∨$EXPR);
! type of last token read by GTOKEN;
DECLAR_VAR(<INTEGER #TOKEN>, $MAINPR, $PARSER∨$EXPR);
! index telling what type of reserved word ;
DECLAR_VAR(<integer res_class>, $PARSER, $MAINPR);
! true if the next token to be read is yet in TOKEN;
DECLAR_VAR(<BOOLEAN STOKEN>, $MAINPR, $PARSER∨$INIT∨$EXPR);
! more info on TOKEN ;
DECLAR_VAR(<INTEGER TOKENCLASS,TOKENINDEX,TOKENLEVEL>, $MAINPR, $PARSER∨$EXPR);
! pointer too relevant record in the symbol table ;
DECLAR_VAR(<RPTR(SCALAR,SYMBOL) TOKENPTR>, $MAINPR, $PARSER);
DECLAR_VAR(<RPTR(ANY_CLASS) TOKENPTR>, FALSE, $EXPR);
! current and remaining part of current line ;
DECLAR_VAR(<STRING $CLNE,$CLINR>, $MAINPR, $PARSER∨$INPOUT);
! prevent macro expansion;
DECLAR_VAR(<BOOLEAN NOEXPAND>, $MAINPR, $PARSER);
! output * or ****>>> depending on new statement ;
DECLAR_VAR(<BOOLEAN STBEGIN>, $MAINPR, $PARSER);
! do we want to print out the file being read in? ;
DECLAR_VAR(<BOOLEAN NEWFILE,FILEPRINT>, $MAINPR, $PARSER);
! ****** SYMBOL TABLE VARIABLES *** ;
DECLAR_VAR(<INTEGER ARRAY OFFSET[1:6,1:7]>, $MAINPR,$INIT∨$DISPLY);
DECLAR_VAR(<INTEGER $SYMOFF,$TSCOFF,$TTROFF>, $MAINPR,$INIT∨$EXPR);
DECLAR_VAR(<INTEGER $TMPOFF,$LEVEL>, $MAINPR,FALSE);
DECLAR_VAR(<RPTR(EXPR$)$ARMPCODE,$BRMUPDATE,$BHDUPDATE>,$INIT, $EXPR);
! ***** MISCELLANEOUS VARIABLES ******* ;
DECLAR_VAR(<REAL $EPS>, $MAINPR, $INIT∨$OUTPUT);
DECLAR_VAR(<STRING $BLANK>, $MAINPR, $INPOUT∨$INIT∨$DISPLY);
DECLAR_VAR(<INTEGER $BRCHR>, $MAINPR, $INPOUT∨$OUTPUT);
DECLAR_VAR(<STRING $USERNAME>, $MAINPR, $INIT);
DECLAR_VAR(<STRING ARRAY $SYNMSG[0:35]>, $MAINPR∧FALSE, $PARSER);
DECLAR_VAR(<STRING ARRAY $DTYPE[0:7]>, $MAINPR∧FALSE,FALSE);
DECLAR_VAR(<STRING ARRAY $WRMSG[1:3]>, #WRIST∧FALSE, $MAINPR∧#WRIST);
! *** buffers and variables for communicating with elf **** ;
DECLAR_VAR(<INTEGER ARRAY $INBUF[1:500]>, $MSSNGR, $EXPR);
DECLAR_VAR(<REAL ARRAY $FPBUF[1:500]>, $MSSNGR, $EXPR);
DECLAR_VAR(<INTEGER $FPSIZ,$INTSIZ,$INTPTR,$FPPTR>, $MSSNGR, $EXPR);
DECLAR_VAR(<INTEGER ALEVENTOFF>, $INIT, $EXPR);
DECLAR_VAR(<INTEGER ARRAY ARROFF[#SC:#FR]>, $MAINPR, $MSSNGR∨$INIT∨$EXPR);
DECLAR_VAR(<INTEGER ARRAY VAROFF[#SC:#FR]>, $MAINPR, $MSSNGR∨$INIT∨$EXPR);
! file requirements;
REQUIRE_LOADMODULE($MAINPR∧#DISPL, <DISPLY[PNT,HE]>);
REQUIRE_LOADMODULE($MAINPR∧#OUTPT, <INPOUT[PNT,HE]>);
REQUIRE_LOADMODULE($MAINPR, <OUTPUT[PNT,HE]>);
REQUIRE_LOADMODULE($MAINPR, <MSSNGR[PNT,HE]>);
REQUIRE_LOADMODULE($MAINPR∧#HELP, <HELP[PNT,HE]>);
REQUIRE_LOADMODULE($MAINPR, <BEXPR[PNT,HE]>);
REQUIRE_LOADMODULE($MAINPR, <PARSE[PNT,HE]>);
REQUIRE_LOADMODULE($MAINPR∧#ARROW, <ARROW[PNT,HE]>);
REQUIRE_LOADMODULE($MAINPR, <INIT[PNT,HE]>);
REQUIRE_LOADMODULE($MAINPR∧#WRIST, <WRIST[PNT,HE]>);
REQUIRE_LOADMODULE($MAINPR∧#GATHER, <GRAPH[PNT,HE]>);
REQUIRE_LOADMODULE(#DEBUG, <PPCODE[PNT,HE]>);
! FAIL FILES;
REQUIRE_LOADMODULE($MAINPR∧#DISPL, <OUTDPW[PNT,HE]>);
REQUIRE "[][]" DELIMITERS;